﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;
using AcadPos.Entity;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBBanco
    {
        #region Carregar Bancos
        public DataTable carregarBancos()
        {
            string SQL = @"SELECT tb.ID_BANCO,
                                   tb.DESCRICAO
                            FROM   TB_BANCO tb
                            WHERE  tb.SITUACAO = 'A'
                            ORDER BY
                                   tb.DESCRICAO";
            DataAccess db = new DataAccess(SQL);
            return db.GetDataTable();
        }
        #endregion

        #region Listar Bancos
        public DataTable listarBancos(string pDescricao)
        {
            string SQL = @"SELECT tb.ID_BANCO,
                                  tb.DESCRICAO AS BANCO,
                                  tb.SITUACAO
                            FROM   TB_BANCO tb
                            WHERE  UPPER(tb.DESCRICAO) LIKE + '%' + UPPER(@DESCRICAO) + '%'
                            ORDER BY
                                   tb.DESCRICAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, pDescricao);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Banco
        public DataTable bancoExiste(string pDescBanco)
        {
            string SQL = @"SELECT tb.ID_BANCO
                                 
                            FROM   TB_BANCO tb

                            WHERE  UPPER(tb.DESCRICAO) = UPPER(@DESCRICAO)";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, pDescBanco);
            return db.GetDataTable();
        }
        #endregion

        #region Obter Dados Banco
        public DataTable getDadosBanco(int pCodBanco)
        {
            string SQL = @"SELECT tb.ID_BANCO,
                                  tb.DESCRICAO AS BANCO,
                                  tb.SITUACAO
                            FROM   TB_BANCO tb
                            WHERE  tb.ID_BANCO = @ID_BANCO";                            
            DataAccess db = new DataAccess(SQL);

            //db.AddParam("@ID_BANCO", SqlDbType.Int, pCodBanco);
            //try
            //{
            //    db.AbrirConexao();
            //    SqlDataReader dr = db.ExecuteReader();
            //    Banco banco = new Banco();
            //    if (dr.Read())
            //    {
            //        banco.Codigo = Convert.ToInt32(dr["ID_BANCO"]);
            //        banco.Descricao = dr["BANCO"].ToString();
            //        banco.Situcao = dr["SITUACAO"].ToString();
            //    }
            //    return banco;
            //}
            //catch (Exception ex)
            //{
            //    throw new Exception(ex.Message);
            //}
            //finally
            //{
            //    db.FecharConexao();
            //}       
            db.AddParam("@ID_BANCO", SqlDbType.VarChar, pCodBanco);
            return db.GetDataTable();
        }
        #endregion

        #region Incluir Banco
        public bool incluirBanco(Banco banco, string usuario)
        {
            string SQL = @"INSERT INTO TB_BANCO
                              (
                                DESCRICAO,
                                SITUACAO,
                                DATA_CADASTRO
                              )
                            VALUES
                              (
                                UPPER(@DESCRICAO),
                                @SITUACAO,
                                GETDATE()
                              )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
            //return db.ExecuteNonQuery();
            
            bool inseriu = db.ExecuteNonQuery();
            
            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_BANCO',
                        ((SELECT CAST(MAX(ID_BANCO) AS VARCHAR) FROM TB_BANCO)
                        + ' | ' + UPPER(@DESCRICAO)
			            + ' | ' + UPPER(@SITUACAO)),                        
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);

                db.AddParam("@ID_BANCO", SqlDbType.Int, banco.Codigo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar Banco
        public bool alterarBanco(Banco banco, string usuario)
        {
            string SQL = @"UPDATE TB_BANCO
                            SET    DESCRICAO  = @DESCRICAO,
                                   SITUACAO   = @SITUACAO
                            WHERE  ID_BANCO   = @ID_BANCO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
            db.AddParam("@ID_BANCO", SqlDbType.Int, banco.Codigo);
            //return db.ExecuteNonQuery();
            
            bool atualizou = db.ExecuteNonQuery();
            
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_BANCO',
                        ((SELECT CAST(MAX(ID_BANCO) AS VARCHAR) FROM TB_BANCO)
                        + ' | ' + UPPER(@DESCRICAO)
			            + ' | ' + UPPER(@SITUACAO)),                        
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_CURSO", SqlDbType.Int, banco.Codigo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Banco
        public bool excluirBanco(Banco banco, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_BANCO
                            WHERE  ID_BANCO = @ID_BANCO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_BANCO", SqlDbType.Int, banco.Codigo);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
            //return db.ExecuteNonQuery();
            
            bool excluiu = db.ExecuteNonQuery();
            
            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_BANCO',
                        (CAST(@ID_BANCO AS VARCHAR)
                        + ' | ' + UPPER(@DESCRICAO)
			            + ' | ' + UPPER(@SITUACAO)),                        
                        UPPER(@USUARIO),
                        GETDATE()
                      )";
                db = new DataAccess(SQL);
                db.AddParam("@ID_BANCO", SqlDbType.Int, banco.Codigo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, banco.Descricao);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, banco.Situcao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }
            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion        
    }
}
